package com.carrental.crm.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.carrental.crm.dto.FeedbackDTO;
import com.carrental.crm.entity.Feedback;
import com.carrental.crm.vo.FeedbackVO;

/**
 * 反馈服务接口
 */
public interface FeedbackService extends IService<Feedback> {

    /**
     * 创建反馈
     *
     * @param feedbackDTO 反馈DTO
     * @return 反馈ID
     */
    Long createFeedback(FeedbackDTO feedbackDTO);

    /**
     * 更新反馈
     *
     * @param feedbackDTO 反馈DTO
     * @return 是否成功
     */
    boolean updateFeedback(FeedbackDTO feedbackDTO);

    /**
     * 根据ID获取反馈详情
     *
     * @param id 反馈ID
     * @return 反馈VO
     */
    FeedbackVO getFeedbackById(Long id);

    /**
     * 根据订单ID获取反馈列表
     *
     * @param orderId 订单ID
     * @return 反馈VO列表
     */
    Page<FeedbackVO> getFeedbacksByOrderId(Long orderId, Page<Feedback> page);

    /**
     * 根据用户ID分页查询反馈列表
     *
     * @param userId 用户ID
     * @param page   分页参数
     * @return 反馈VO分页
     */
    Page<FeedbackVO> pageUserFeedbacks(Long userId, Page<Feedback> page);

    /**
     * 分页查询反馈列表
     *
     * @param page       分页参数
     * @param title      反馈标题
     * @param type       反馈类型
     * @param status     反馈状态
     * @param userId     用户ID
     * @param customerId 客户ID
     * @param orderId    订单ID
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return 反馈VO分页
     */
    Page<FeedbackVO> pageFeedbacks(Page<Feedback> page, String title, Integer type, Integer status, Long userId, Long customerId, Long orderId, String startTime, String endTime);

    /**
     * 处理反馈
     *
     * @param id           反馈ID
     * @param handlerId    处理人ID
     * @param handlerName  处理人姓名
     * @param handleResult 处理结果
     * @return 是否成功
     */
    boolean handleFeedback(Long id, Long handlerId, String handlerName, String handleResult);

    /**
     * 评价反馈处理结果
     *
     * @param id          反馈ID
     * @param satisfaction 满意度（1-5）
     * @param evaluation  评价内容
     * @return 是否成功
     */
    boolean evaluateFeedback(Long id, Integer satisfaction, String evaluation);
} 